/* 
 * File:   SMP.c
 * Author: Vagner Clementino
 *
 * Created on 11 de Março de 2012, 11:24
 */

#include <stdlib.h>
#include <stdio.h>
#include "matriz_casamento.h"


matriz_casamento cria_matriz(int tamanho){
    matriz_casamento m = NULL;
    int i;
    m  = (int**)malloc(tamanho*sizeof(int*));
    if(m == NULL){
        printf("Erro na alocação da matriz de casamento.\n");
        exit(-6);
    }
    for(i = 0;i<tamanho;i++){
        m[i] = (int *) malloc(tamanho*sizeof(int));
        if(m[i] == NULL){
        printf("Erro na alocação da matriz de casamento.\n");
        exit(-7);
        }
    }
    inicializa_matriz(m,tamanho);
    return m;
}

void desaloca_matriz(matriz_casamento m, int tam_matriz){
    
    int i;
    for(i=0;i<tam_matriz;i++){
        free (m[i]);
    }
    free(m);
    
}

void inicializa_matriz(matriz_casamento m, int tam_matriz){
    int i,j;
    for(i=0;i<tam_matriz;i++){
        for(j=0;j<tam_matriz;j++){
            m[i][j] = 0;
        }
    }
}

void imprime_matriz(const matriz_casamento m,int tam_matriz){
    int i,j;
    for(i=0;i<tam_matriz;i++){
        for(j=0;j<tam_matriz;j++){
            printf("%d ",m[i][j]);
        }
        printf("\n");
    }    
}

int esta_solteiro(int id_pessoa, char sexo,matriz_casamento m, int tam_matriz){
    int i;
    if(sexo == 'h'){
        for(i=0; i < tam_matriz;i++){
            if(m[id_pessoa][i] == 1){
                /*Não está solteiro*/
                return i;
            }
        }
    }else if(sexo == 'm'){
        for(i=0; i < tam_matriz;i++){
            if(m[i][id_pessoa] == 1){
                /*Não está solteiro*/
                return i;
            }
        }
        
    }
    return SOLTEIRO;
}


int tem_solteiro(const matriz_casamento m, int tam_matriz){
    int i;
    int status_solteiro;
    
    for(i=0;i<tam_matriz;i++){
        status_solteiro = esta_solteiro(i,'h',m,tam_matriz);
        if(status_solteiro == SOLTEIRO){
            /*Foi encontrado um homem solteiro*/
            return 1;
        }
    }
    return 0;
}
